﻿/**
 * Author: Rick van Rijn(RVR), Dennis van der Werf(DvW, Martijn van Aalst(MvA)
 * Date: 29-3-2012
 * Groep: 3
 * Versiebeheer:
 * Version 1.0 FinalLocate Created (RVR)
 * Version 1.1 Hue check added (RVR)
 * Version 1.2 Failsafe added (DvW, MvA)
 * Version 1.3 Optimized codes (DvW, MvA)
 * Version 1.4 Tweaked values to give better results (MvA, DvW)
 */

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Forms;

namespace Team3_ProjectGUIFinal
{
    public class FinalLocateAlgorithm : Algorithm
    {

        public FinalLocateAlgorithm(String name) : base(name) { }

        public override System.Drawing.Bitmap DoAlgorithm(System.Drawing.Bitmap sourceImage)
            {
                
                MeanHSVAlgorithm mhs = new MeanHSVAlgorithm("mhs");
                Bitmap mhhs = mhs.DoAlgorithm(sourceImage);
                bool equal = true; //equal houd bij of er equalisatie is uitgevoerd op het plaatje
                Bitmap equalized;
            
                if (mhs.Hue < 130.0 || mhs.Saturation < 0.21) // Als het plaatje donker is.
                {
                    EqualisationAlgorithm eq = new EqualisationAlgorithm("eq");
                    equal = false;
                    equalized = eq.DoAlgorithm(sourceImage); // voert equalisation op plaatje uit om hem lichter te maken
                }
                else // als het plaatje licht is equalizatie niet nodig
                {
                    equalized = sourceImage; 
                }

                LocateLicensePlate loc = new LocateLicensePlate("loc");
                Bitmap returnImage = loc.DoAlgorithm(equalized);
                int Height = returnImage.Height;
                int Width = returnImage.Width;
                int size = Width * Height;
                if (Height * 2 > Width || size < 50) //Kijkt of een mogelijk nummerbord is gevonden
                    // height/width is verhouding van nummerbord, als het plaatje onder de 50 pixels heeft kan er nooit ocr op toegepast worden
                {
                    if (equal) // Als er geen mogelijk nummerbord is gevonden kijkt hij of er voorgaand equalisation is gebruikt.
                    { //Equalisation word toegepast als deze voorheen niet was toegepast
                        EqualisationAlgorithm eq = new EqualisationAlgorithm("eq");
                        equalized = eq.DoAlgorithm(sourceImage);
                    }
                    else if (!equal) // als er wel equalisation was gebruikt dan probeert hij nog een keer het nummerbord te
                    { //lokalizeren zonder equalisatie
                        equalized = sourceImage;
                    }
                    returnImage = loc.DoAlgorithm(equalized); //voert het locate algoritme weer uit
                }

                return returnImage;
            }
    }
}
